package ebj.common.queue.request;

import java.util.ArrayList;
import java.util.Queue;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentLinkedQueue;

public class TaskQuery extends TimerTask {

    public static Queue<Object> queue;// Queue是java自己的队列List，具体可看API，是同步安全的.

    // 这里在介绍一个很好用又强大的线程安全的Map==》ConcurrentHashMap （具体可看API）

    static {
        queue = new ConcurrentLinkedQueue<Object>();
    }

    private static boolean isRunning = false;

    private String lock1 = "";

    // public TaskQuery() {}

    // public TaskQuery(ServletContext context) {
    // this.context = context;
    // }

    public void run() {
        synchronized (lock1) {
            if (!isRunning) {
                isRunning = true;
                queryList();
                ThreadPool.createThreadPool();// 唤起线程池
                isRunning = false;
            } else {
                System.out.println("上一次任务执行还未结束");
            }

            lock1.notify();// 必须要加这个，不然有时会死锁
        }

    }

    /*
     * queue 和 这个queryList()方法都可以根据具体业务提取成单独的java文件
     */
    public void queryList() {
        // list就是从数据库里查询的结果
        ArrayList<String> list = new ArrayList<String>();
        for (String str : list) {
            queue.offer(str);// 向队列添加数据
        }
    }

}
